import hashlib
import json
import shutil
import os
import sys
import warnings
from pathlib import Path
from typing import (
    Any,
    Callable,
    Dict,
    Generator,
    List,
    Literal,
    Optional,
    Protocol,
    Sequence,
    Union,
    Pattern,
    cast,
)

import pytest
from playwright.sync_api import (
    Browser,
    BrowserContext,
    BrowserType,
    Error,
    Page,
    Playwright,
    sync_playwright,
    ProxySettings,
    StorageState,
    HttpCredentials,
    Geolocation,
    ViewportSize,
)
from slugify import slugify
import tempfile
from modules.区域管理 import 区域管理
from modules.探头管理 import 探头管理
from modules.问题列表 import 问题列表
from modules.场所_场所管理 import 场所_场所管理
from modules.场所_监测站点 import 场所_监测站点
from modules.场所_预警短信 import 场所_预警短信
from modules.行政_审批事项 import 行政_审批事项
from modules.行政_短信通知 import 行政_短信通知
from modules.行政_证照信息 import 行政_证照信息
from modules.党组织活动 import 党组织活动
from modules.人员_重点人员管理 import 人员_重点人员管理
from modules.人员_网络队伍管理 import 人员_网络队伍管理
from modules.人员_可用力量管理 import 人员_可用力量管理
from modules.人员_常住人口管理 import 人员_常住人口管理
from modules.人员_人员走访列表 import 人员_人员走访列表
from modules.场所巡查 import 场所巡查
from modules.审核_数据审核 import 审核_数据审核
from modules.审核_重点场所审核 import 审核_重点场所审核
from modules.统战_统战人士 import 统战_统战人士
from modules.统战_同心议事 import 统战_同心议事
from modules.统战_同心分采 import 统战_同心分采
from modules.问题_工单列表 import 问题_工单列表
from modules.问题_企业诉求 import 问题_企业诉求

artifacts_folder = tempfile.TemporaryDirectory(prefix="playwright-pytest-")
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))


@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        # 配置浏览器的高度和宽度
        **browser_context_args,
        # "viewport": {
        #     "width": 1920,
        #     "height": 1080,
        # },
        # # 设置录屏的分辨率大小
        # "record_video_size": {
        #     "width": 1920,
        #     "height": 1080,
        # },
        "viewport": None,  # 设置viewport为None以避免固定尺寸
        "no_viewport": True,  # 确保没有设置viewport大小

    }


@pytest.fixture(scope="session")
def browser_type_launch_args(browser_type_launch_args):
    return {
        **browser_type_launch_args,
        "headless": False,
        # "ignoreHTTPSErrors": True,
    }


@pytest.fixture(scope="session")
def browser():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        yield browser
        browser.close()


@pytest.fixture()
def context(browser):
    context = browser.new_context(ignore_https_errors=True)  # 在这里设置忽略SSL错误
    yield context
    context.close()


class PageInstance:
    def __init__(self, page: Page):
        self.区域管理 = 区域管理(page)
        self.探头管理 = 探头管理(page)
        self.问题列表 = 问题列表(page)
        self.场所_场所管理 = 场所_场所管理(page)
        self.场所_监测站点 = 场所_监测站点(page)
        self.场所_预警短信 = 场所_预警短信(page)
        self.行政_审批事项 = 行政_审批事项(page)
        self.行政_短信通知 = 行政_短信通知(page)
        self.行政_证照信息 = 行政_证照信息(page)
        self.党组织活动 = 党组织活动(page)
        self.人员_重点人员管理 = 人员_重点人员管理(page)
        self.人员_网络队伍管理 = 人员_网络队伍管理(page)
        self.人员_可用力量管理 = 人员_可用力量管理(page)
        self.人员_常住人口管理 = 人员_常住人口管理(page)
        self.人员_人员走访列表 = 人员_人员走访列表(page)
        self.场所巡查 = 场所巡查(page)
        self.审核_数据审核 = 审核_数据审核(page)
        self.审核_重点场所审核 = 审核_重点场所审核(page)
        self.统战_统战人士 = 统战_统战人士(page)
        self.统战_同心议事 = 统战_同心议事(page)
        self.统战_同心分采 = 统战_同心分采(page)
        self.问题_工单列表 = 问题_工单列表(page)
        self.问题_企业诉求 = 问题_企业诉求(page)

@pytest.fixture()
def pw_page(context):
    page = context.new_page()
    yield PageInstance(page)